#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;
//
// Sub permutation 子排列
// v {1, 2, 3}
/*
3 2 1 
3 1 2 
2 3 1 
2 1 3 
1 3 2 
1 2 3 
*/
// 1 2
// 2 1
// 1 3
// 3 1
// 2 3
// 3 2
// subPermutation({1, 2, 3}, 2);
// 打印 {1, 2, 3} 中，所有两个元素为一组的子排列
void subPermutation(vector<int> v, int k) {
  // k <= v.size()
  sort(v.begin(), v.end());

  vector<vector<int>> result;
  do {
    // v 
    // v 就是一种可能的全排列
    // v 中前K个元素
    vector<int> prefix(v.begin(), v.begin() + k);
    result.push_back(prefix);
    
  } while (next_permutation(v.begin(), v.end()));

  // result
  // 打印 result
}


int main(int argc, char const *argv[])
{
  vector<int> v {3, 2, 1};

  do {
    for (int n : v) {
      cout << n << " ";
    }
    cout << endl;
  } while(prev_permutation(v.begin(), v.end()));

  // 观察这段程序的执行结果，然后回答：
  // 1. next_permutation 的返回值是什么？
  // 2. next_permutation 的功能是什么？
  // 3. next_permutation 使用条件是： v 升序排列的时候才能计算全排列
  return 0;
}
